//@author: DroseUnbreakble
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int N = 3e5 + 3;
int note[N];
string s;
pair <int, int> a[N];
int trace(int id) {
if(a[id].fi == 0 && a[id].se == 0) return 0;
int &ret = note[id];
if(ret != -1) return ret;
ret = 1e9;
if(s[id] == 'U') {
if(a[id].fi) ret = min(ret, trace(a[id].fi) + 1);
if(a[id].se) ret = min(ret, trace(a[id].se) + 1);
}
if(s[id] == 'L') {
if(a[id].fi) ret = min(ret, trace(a[id].fi));
if(a[id].se) ret = min(ret, trace(a[id].se) + 1);
}
if(s[id] == 'R') {
if(a[id].fi) ret = min(ret, trace(a[id].fi) + 1);
if(a[id].se) ret = min(ret, trace(a[id].se));
}
return ret;
}
int32_t main(){
cin.tie(0)->sync_with_stdio(0);
if(fopen("sus.inp", "r")){
freopen("sus.inp", "r", stdin);
freopen("sus.out", "w", stdout);
}
int t;
cin >> t;
while(t--) {
memset(note, -1, sizeof(note));
int n;
cin >> n;
cin >> s; s = " " + s;
for(int i = 1; i <= n; i++) cin >> a[i].fi >> a[i].se;
int ans = trace(1);
cout << ans << '\n';
}
}
2149. Rearrange Array Elements by Sign | 2150. Find All Lonely Numbers in the Array |
2151. Maximum Good People Based on Statements | 2144. Minimum Cost of Buying Candies With Discount |
Non empty subsets | 1630A - And Matching |
1630B - Range and Partition | 1630C - Paint the Middle |
1630D - Flipping Range | 1328A - Divisibility Problem |
339A - Helpful Maths | 4A - Watermelon |
476A - Dreamoon and Stairs | 1409A - Yet Another Two Integers Problem |
977A - Wrong Subtraction | 263A - Beautiful Matrix |
180C - Letter | 151A - Soft Drinking |
1352A - Sum of Round Numbers | 281A - Word Capitalization |
1646A - Square Counting | 266A - Stones on the Table |
61A - Ultra-Fast Mathematician | 148A - Insomnia cure |
1650A - Deletions of Two Adjacent Letters | 1512A - Spy Detected |
282A - Bit++ | 69A - Young Physicist |
1651A - Playoff | 734A - Anton and Danik |